Spring Boot এ Resilience4j Integration

Java Technologies - স্প্রিং বুট ক্লায়েন্ট (Spring Boot Client) Circuit Breaker Pattern এবং Resilience4j Integration |
134
134

Resilience4j হল একটি লাইটওয়েট ফ্রেমওয়ার্ক যা স্প্রিং বুট অ্যাপ্লিকেশনে ফল্ট টলারেন্স (fault tolerance) যোগ করার জন্য ব্যবহার করা হয়। এটি মাইক্রোসার্ভিস বা ক্লায়েন্ট-সার্ভার অ্যাপ্লিকেশনে সার্ভিস ব্যর্থতা থেকে রক্ষা করার জন্য কার্যকর। Resilience4j প্রধানত Circuit Breaker, Retry, Rate Limiter, Bulkhead, এবং Time Limiter সমর্থন করে।

নিচে Spring Boot-এ Resilience4j ইন্টিগ্রেশনের একটি উদাহরণ দেখানো হলো:


১. প্রজেক্ট তৈরি করুন

Spring Initializr ব্যবহার করে একটি নতুন স্প্রিং বুট প্রজেক্ট তৈরি করুন। নিচের ডিপেনডেন্সি যুক্ত করুন:

  • Spring Web
  • Resilience4j

২. pom.xml ডিপেনডেন্সি যুক্ত করুন

<dependencies>
    <dependency>
        <groupId>io.github.resilience4j</groupId>
        <artifactId>resilience4j-spring-boot2</artifactId>
        <version>1.7.1</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

৩. application.properties কনফিগারেশন

# Circuit Breaker কনফিগারেশন
resilience4j.circuitbreaker.instances.myService.failure-rate-threshold=50
resilience4j.circuitbreaker.instances.myService.slow-call-rate-threshold=50
resilience4j.circuitbreaker.instances.myService.slow-call-duration-threshold=2s
resilience4j.circuitbreaker.instances.myService.minimum-number-of-calls=5
resilience4j.circuitbreaker.instances.myService.sliding-window-size=10
resilience4j.circuitbreaker.instances.myService.sliding-window-type=COUNT_BASED
resilience4j.circuitbreaker.instances.myService.wait-duration-in-open-state=10s

# Retry কনফিগারেশন
resilience4j.retry.instances.myService.max-attempts=3
resilience4j.retry.instances.myService.wait-duration=2s

৪. API ক্লায়েন্ট তৈরি করুন

import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class ApiClient {

    private final RestTemplate restTemplate;

    public ApiClient(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    public String fetchData(String url) {
        return restTemplate.getForObject(url, String.class);
    }
}

৫. Resilience4j Circuit Breaker যুক্ত করুন

import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker;
import io.github.resilience4j.retry.annotation.Retry;
import org.springframework.stereotype.Service;

@Service
public class ResilientApiClient {

    private final ApiClient apiClient;

    public ResilientApiClient(ApiClient apiClient) {
        this.apiClient = apiClient;
    }

    @CircuitBreaker(name = "myService", fallbackMethod = "fallbackFetchData")
    @Retry(name = "myService")
    public String fetchDataWithResilience(String url) {
        return apiClient.fetchData(url);
    }

    // ফallback method
    public String fallbackFetchData(String url, Throwable throwable) {
        return "Fallback response due to: " + throwable.getMessage();
    }
}

৬. Controller ক্লাস তৈরি করুন

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ApiController {

    private final ResilientApiClient resilientApiClient;

    public ApiController(ResilientApiClient resilientApiClient) {
        this.resilientApiClient = resilientApiClient;
    }

    @GetMapping("/fetch-data")
    public String fetchData() {
        String url = "https://jsonplaceholder.typicode.com/posts/1"; // উদাহরণ URL
        return resilientApiClient.fetchDataWithResilience(url);
    }
}

৭. Resilience4j এর বৈশিষ্ট্যসমূহ

১. Circuit Breaker:

  • এটি যখন সার্ভিসে বারবার ব্যর্থতা ঘটে তখন সার্ভিসকে সাময়িকভাবে বন্ধ করে দেয়।
  • @CircuitBreaker ব্যবহার করে নির্ধারণ করা হয়।

২. Retry:

  • এটি একটি নির্দিষ্ট সংখ্যক সময় একই রিকোয়েস্ট পুনরায় চেষ্টা করে।
  • @Retry ব্যবহার করা হয়।

৩. Fallback Method:

  • সার্ভিস ব্যর্থ হলে এটি ব্যাকআপ বা ডিফল্ট রেসপন্স সরবরাহ করে।
  • fallbackMethod প্যারামিটার ব্যবহার করা হয়।

৮. লগ আউটপুট উদাহরণ

সফল API কল:

INFO  - CircuitBreaker 'myService' in CLOSED state.
INFO  - API Response: {userId: 1, id: 1, title: "...", body: "..."}

সার্ভিস ব্যর্থ হলে (Fallback):

INFO  - CircuitBreaker 'myService' in OPEN state.
INFO  - Fallback response due to: I/O error on GET request

৯. Spring Boot Actuator (অপশনাল)

Resilience4j Actuator ব্যবহার করলে Circuit Breaker এর মেট্রিক্স দেখতে পারবেন। pom.xml-এ নিচের ডিপেনডেন্সি যোগ করুন:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

এবং application.properties ফাইলে Actuator সক্রিয় করুন:

management.endpoints.web.exposure.include=*

Endpoint:
http://localhost:8080/actuator/circuitbreakers


Resilience4j এর সুবিধা:

  1. Fault Tolerance: সিস্টেমকে ব্যর্থতা থেকে সুরক্ষা প্রদান করে।
  2. Customizable Policies: কনফিগারেশন ফাইলে পলিসি নির্ধারণ করা যায়।
  3. Spring Integration: স্প্রিং বুট অ্যাপ্লিকেশনের সাথে সহজ ইন্টিগ্রেশন।
  4. Actuator Support: সার্ভিসের মেট্রিক্স মনিটরিং।

Resilience4j হল Spring Boot অ্যাপ্লিকেশনে উচ্চমানের রেজিলিয়েন্স ফ্রেমওয়ার্ক। এটি Hystrix এর বিকল্প এবং বর্তমান সময়ে ব্যবহারযোগ্য একটি উন্নত টুল।

Content added By
Promotion